package com.ysd.lis.util.CA;


import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class cossDemo {

  //  public StringBuffer url = new StringBuffer("https://coss-dev.isignet.cn:18759/");
  //  public static final String secret = "XTka8lO2NMH9PCffiFWLE1HV4UPYCWMu";
  //  public static final String appId = "APP_0157E810F6894BEEB4DEC70331720557";
    
    
    public StringBuffer url = new StringBuffer("http://172.16.13.203:8759/");
    public static final String secret = "cCgK8MyNlbbpDHqc5u9BtKSP2qv010UP";
    public static final String appId = "APP_87BD03920D6D4D3DA22C729EB162BA38";
    public static final String signAlgo = "HMAC";
    public static final String version = "1.0";
    JsonParser jp = new JsonParser();
    Map<String, String> map;

    @Before
    public void setUp() throws IOException {
        map = new HashMap();
        map.put("appId", appId);
        map.put("signAlgo", signAlgo);
        map.put("version", version);
      
        
    }
    
    
    
    /**
     * 查询用户信息
     * 功能说明：查询用户详细信息，业务系统调用本接口即可完成通过用户 uniqueId 或证件类型、证件号查询用户的 userId（即 MSSPID）、姓名等信息.
     * 说明：
		第一优先级：如传入 userId 则使用 userId 作为查询条件；
		第二优先级：如 userId 为空，且传入了 idNumber、idType 则以证件号查询用户信息；
		第三优先级：如以上两项同时不满足，则以 uniqueId 为条件查询用户信息；
		如以上参数全部为空，返回错误信息。	
     */
    @Test
    public void queryUserInfo() throws Exception {
      //map.put("userId", "fc018d18d1f72eb466ae49e73a45e22a0e0cc99602591aa04a1856bb49f265b5");// 用户Id
      //   map.put("userName", "隽叶圣");// 姓名
        // map.put("idNumber", "320821199303200773");// 身份证
      //   map.put("idType", "SF");// 身份证
       map.put("uniqueId", "851");// 身份证
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/queryUserInfo").toString(), requestJson);
        System.out.println(resp);
    }
    
    

    /**
     * 添加用户
     */
    @Test
    public void addUser() throws Exception {
      while(true){
    	map.put("userName", "隽叶圣");// 用户名
        map.put("idType", "SF");// 证件号
        map.put("idNumber", "320821199303200773");// 证件号
        map.put("mobile", "17602551993");// 证件号
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        //System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/addUser").toString(), requestJson);
        Thread.sleep(5000);
        System.out.println(resp);
    }
    }
    
    /**
     * 产生激活码
     */
    @Test
    public void getAuthCode() throws Exception {
        map.put("userId", "fc018d18d1f72eb466ae49e73a45e22a0e0cc99602591aa04a1856bb49f265b5");// 用户名
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/getAuthCode").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    /**
     * 获取用户激活码（校验身份核实）
     * 功能说明：该接口用于获取用户激活码，但是要求用户传入的姓名和证件号与注册时填写的信息保持一致
     */
    @Test
    public void getAuthCodeWithIdenVerify() throws Exception {
        map.put("userId", "fc018d18d1f72eb466ae49e73a45e22a0e0cc99602591aa04a1856bb49f265b5");// 用户Id
        map.put("idNumber", "320821199303200773");// 身份证
        map.put("idType", "SF");// 身份证
        map.put("userName", "隽叶圣");// 身份证
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/getAuthCodeWithIdenVerify").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    /**
     * 添加签名任务（推送签名）
     * 功能说明：该接口用户业务系统服务端调用，用于添加一个签名任务，支持对数据原文、hash 数据、网页三种数据格式，该接口的返回值供移动终端完成协同签名使用。
     */
    @Test
    public void addSignJob() throws Exception {
        map.put("userId", "fc018d18d1f72eb466ae49e73a45e22a0e0cc99602591aa04a1856bb49f265b5");// 用户Id
        map.put("title", "123");// 标题
        map.put("dataType", "DATA");//原文类型（DATA：原文，HASH：hash 数据，WEB_SEAl： 网页签章）
        map.put("algo", "SM3withSM2");// 签名算法(SHA1withRSA|SHA256withRSA|SM3withSM2)
     // map.put("description", "描述性语句");// 描述性语句
     // map.put("expiryDate", "描述性语句");// 有效期（截止时间，单位为分钟），默认有效期为1天
        map.put("data", "MTIz");// 待签数据（必须是 base64 编码）  MTTZ为：123
     // map.put("callBackUrl", "");// 回调地址
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/addSignJob").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    @Test
    public void addSignJob1() throws Exception {
        map.put("userId", "43a8b10b36caad174efc0c4b67aaf0d05b7dcaca9fecbe22579aaa00238564db");// 用户Id
        map.put("title", "登入");// 标题
        map.put("dataType", "DATA");//原文类型（DATA：原文，HASH：hash 数据，WEB_SEAl： 网页签章）
        map.put("algo", "SM3withSM2");// 签名算法(SHA1withRSA|SHA256withRSA|SM3withSM2)
     // map.put("description", "描述性语句");// 描述性语句
     // map.put("expiryDate", "描述性语句");// 有效期（截止时间，单位为分钟），默认有效期为1天
        map.put("data", "bc60cf27135fb7cc93d5d238500d8d90c6603386");// 待签数据（必须是 base64 编码）  MTTZ为：123
     // map.put("callBackUrl", "");// 回调地址
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/addSignJob").toString(), requestJson);
        System.out.println(resp);
    }
    
    /**
     * 撤销签名任务
     * 功能说明：通过业务端撤销已经添加的签名任务
     */
    @Test
    public void revokeSignJob() throws Exception {
        map.put("signJobId", "SD_e460dd3e-0340-4da8-96c8-f63665f97320");// 签名任务 ID（添加签名任务接口返回的 signJobId   
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/revokeSignJob").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    /**
     * 获取签名结果
     * 功能说明：移动端完成签名任务后，该接口可以根据签名任务 id 获取签名结果，该接口配合3.2.1使用
     * 状态（UNSIGN：待签，FINISH：已签，EXPIRE：过期，REVOKE：签名任务被服务端撤销，REFUSE：签名任务被客户端拒绝）
     */
    @Test
    public void getSignResult() throws Exception {
        map.put("signDataId", "SD_8c99300e-aca0-46ab-9001-80adead33065");// 签名数据 ID（添加签名任务接口返回的 signDataId       
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/getSignResult").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    
    
    /**
     * 开启自动签名
     * 功能说明：通过业务端为指定的用户添加自动签名的权限，开启自动签名时需要用户进行扫码签名或基于
			任务 ID 签名，然后通过3.2.3获取签名结果接口判断授权签名结果，只有用户对开启自动签名的签名任务
			进行授权签名完成后才能调用3.3.3自动签名接口进行自动签名。
     */
    @Test
    public void startAutoSign() throws Exception {
        map.put("userId", "0eba015f9f0aa13937a747c48d64206976d46da9e137636508b31554d0a94fcd");// 用户 Id    
        map.put("timeRegion", "14400");// 过期时间   
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/startAutoSign").toString(), requestJson);
        System.out.println(resp);
    }
    
    /**
     * 自动签名
     * 功能说明：通过业务端为指定的用户添加自动签名的权限，开启自动签名时需要用户进行扫码签名或基于
			任务 ID 签名，然后通过3.2.3获取签名结果接口判断授权签名结果，只有用户对开启自动签名的签名任务
			进行授权签名完成后才能调用3.3.3自动签名接口进行自动签名。
     */
    @Test
    public void autoSign() throws Exception {
        map.put("userId", "0eba015f9f0aa13937a747c48d64206976d46da9e137636508b31554d0a94fcd");// 用户 Id    
        map.put("dataType", "DATA");// 原文类型  
        map.put("algo", "SM3withSM2");// 签名算法
        map.put("expiryDate", "123");// 描述
        map.put("data", "MTIz");// 待签数据   
        map.put("signToken","SD_0be9f454-cbe6-4731-9feb-e58ecc6baff1");// 过期时间   
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/autoSign").toString(), requestJson);
        //解析json字符串
        JsonObject jo = jp.parse(resp).getAsJsonObject();
        System.out.println(resp);
        System.out.println(jo.get("status").getAsString());
       //获取签名结果 
      
  
    }
    
    
    /**
     * 查询印章图片
     * 功能说明：用于查询个人的印章图片
     */
    @Test
    public void queryImage() throws Exception {
    	map.put("userId", "fc018d18d1f72eb466ae49e73a45e22a0e0cc99602591aa04a1856bb49f265b5");// 用户Id
        String requestJson = RequestUtils.generateRequestJson(map, secret);
        System.out.println(requestJson);
        String resp = HTTPUtils.post(url.append("/coss/service/v1/queryImage").toString(), requestJson);
        System.out.println(resp);
    }
    
    
    
    
    
}
   